package logique.outils;

import gui.items.OperationAction;

import java.util.Date;

public class Chrono implements Runnable {  
	private Thread chronometre;
	private long timeDebut;
	private long timeFin;
	private long time = 0;
	private boolean chronoContinue = false;
	private boolean pause = true;

	private OperationAction operationAction = null;
	
	public Chrono() {}
	
	public Chrono(OperationAction operationAction) {
		this.operationAction = operationAction;
	}

	public long getTime() {
		return this.time;
	}

	public long getTimeDebut() {
		return this.timeDebut;
	}

	public long getTimeFin() {
		return this.timeFin;
	}

	public Thread getThreadChrono() {
		return this.chronometre;
	}
	
	public boolean isRunning() {
		return chronoContinue;
	}
	
	public void setPause(boolean pause) {
		this.pause = pause;
	}

	// Méthode appelée par le système au démarrage du chrono
	public void start() {
		// création et démarrage du chronomètre
		if (chronoContinue == false) { // pour éviter de démarrer 2 fois le chrono
			chronoContinue = true;
			timeDebut = new Date().getTime();
			chronometre = new Thread(this);
			chronometre.start();
		}
	}

	// Méthode utilisée pour arrêter le chrono
	public void stop() {
		if (chronometre != null) {
			timeFin = timeDebut + time * 1000;
			chronoContinue = false;
		}

	}

	public void run () {
		try {
			while (chronoContinue) { 
				// Augmente d'une seconde
				if (!pause) {
					time++;
					if (operationAction != null){
						operationAction.execute();
					}
				}
				
				// Arrête le thread pendant une seconde
				Thread.sleep (1000);

			}
		}
		catch (InterruptedException e) { }
	}
}
